Scroll to navigation

SYSCALLS(2) Manuel du programmeur Linux SYSCALLS(2)

NOM

syscalls - Appels système de Linux

SYNOPSIS

Appels système de Linux.

DESCRIPTION

L'appel système est l'interface fondamentale entre une application et le noyau Linux.

Appels système et fonctions de bibliothèque

Les appels système ne sont en général pas appelé directement, mais à partir de fonctions de la glibc (ou d'une autre bibliothèque). Pour avoir des détails pour l'appel direct d'un appel système, consultez intro(2). Souvent, mais pas toujours, le nom de la fonction de la bibliothèque est le même que celui de l'appel système à invoquer. Par exemple, la fonction truncate() de la glibc invoque l'appel système « truncate » sous-jacent.

Souvent, la fonction enveloppe de la glibc est très petite, ne faisant que très peu en plus de placer les paramètres dans les bons registres avant d'appeler l'appel système puis de positionner errno comme il faut une fois que l'appel système a rendu la main. (Ce sont les mêmes étapes qui sont effectuées par syscall(2), qui peut être utilisé pour les appels système pour lesquels il n'y a pas de fonction enveloppe de fournies.) Note : les appels système indiquent un échec en renvoyant un numéro d'erreur négatif à l'appelant ; quand ça arrive, la fonction enveloppe prend l'opposé du numéro d'erreur (pour le rendre positif), le copie dans errno et renvoie -1 pour l'appelant de la fonction enveloppe.

Des fois, cependant, la fonction réalise certaines opérations avant d'invoquer l'appel système. Par exemple, de nos jour il y a deux appels système truncate(2) et truncate64(2) (pour les raisons données ci-dessous) et la fonction truncate() de la glibc vérifie quels appels système sont fournis par le noyau et détermine lequel doit être utilisé.

Liste des appels système

Cette page de manuel liste ces appels système qui sont communs à la plupart des plates-formes. Dans cette liste, la colonne Noyau indique la version du noyau pour laquelle ils sont apparus, s'ils sont apparu après la version 2.2 de Linux. Notez les points suivants :

  • Si aucune version de noyau n'est indiquée, l'appel système est apparu dans le noyau 1.0 ou auparavant.
  • Quand un appel système est marqué « 1.2 », cela signifie que l'appel système est probablement apparu dans une version 1.1.x du noyau et est apparu la première fois dans un noyau stable dans la version 1.2. (Le développement du noyau 1.2 a débuté à partir d'une branche de la version 1.0.6 du noyau, au travers de la série « non stable » des noyaux 1.1.x.)
  • Quand un appel système est marqué « 2.0 », cela signifie que l'appel système est probablement apparu dans une version 1.3.x du noyau et est apparu la première fois dans un noyau stable dans la version 2.0. (Le développement du noyau 2.0 a débuté à partir d'une branche de la version 1.2.x du noyau, vers la version 1.2.10, au travers de la série « non stable » des noyaux 1.3.x.)
  • Quand un appel système est marqué « 2.2 », cela signifie que l'appel système est probablement apparu dans une version 2.1.x du noyau et est apparu la première fois dans un noyau stable dans la version 2.2.0. (Le développement du noyau 2.2 a débuté à partir d'une branche de la version 2.0.21 du noyau, au travers de la série « non stable » des noyaux 2.1.x.)
  • Quand un appel système est marqué « 2.4 », cela signifie que l'appel système est probablement apparu dans une version 2.3.x du noyau et est apparu la première fois dans un noyau stable dans la version 2.4.0. (Le développement du noyau 2.4 a débuté à partir d'une branche de la version 2.2.8 du noyau, au travers de la série « non stable » des noyaux 2.3.x.)
  • Quand un appel système est marqué « 2.6 », cela signifie que l'appel système est probablement apparu dans une version 2.5.x du noyau et est apparu la première fois dans un noyau stable dans la version 2.6.0. (Le développement du noyau 2.6 a débuté à partir d'une branche de la version 2.4.15 du noyau, au travers de la série « non stable » des noyaux 2.5.x.)
  • A partir du noyau 2.6.0, le mode de développement a changé et de nouveaux appels système pourraient apparaître à chaque version 2.6.x. Dans ce cas, le numéro de version exact où l'appel système est apparu est indiqué.
  • Dans certains cas, un appel système a été ajouté à un noyau de la série stable après l'embranchement provenant de la série stable précédente, puis a été porté dans la série stable précédente du noyau. Par exemple certains appels système apparus dans 2.6.x ont été portés dans une version 2.4.x postérieure à la version 2.4.15. Dans ce cas, les deux versions des deux séries majeures du noyau dans lesquelles l'appel système est apparu sont mentionnées.

La liste des appels système qui sont disponibles dans la version 2.6.28 (ou dans certains cas pour certaines versions plus anciennes du noyau) est la suivante :

Appel système Noyau Notes
_llseek(2) 1.2
_newselect(2)
_sysctl(2)
accept(2)
accept4(2) 2.6.28
access(2)
acct(2)
add_key(2) 2.6.11
adjtimex(2)
afs_syscall(2) Pas implémenté
alarm(2)
alloc_hugepages(2) 2.5.36 Retiré dans 2.5.44
bdflush(2)
bind(2)
break(2) Pas implémenté
brk(2)
cacheflush(2) 1.2 Pas sur i386
capget(2) 2.2
capset(2) 2.2
chdir(2)
chmod(2)
chown(2)
chown32(2) 2.4
chroot(2)
clock_getres(2) 2.6
clock_gettime(2) 2.6
clock_nanosleep(2) 2.6
clock_settime(2) 2.6
clone(2)
close(2)
connect(2)
creat(2)
create_module(2)
delete_module(2)
dup(2)
dup2(2)
dup3(2) 2.6.27
epoll_create(2) 2.6
epoll_create1(2) 2.6.27
epoll_ctl(2) 2.6
epoll_pwait(2) 2.6.19
epoll_wait(2) 2.6
eventfd(2) 2.6.22
eventfd2(2) 2.6.27
execve(2)
exit(2)
exit_group(2) 2.6
faccessat(2) 2.6.16
fadvise64(2) 2.6
fadvise64_64(2) 2.6
fallocate(2) 2.6.23
fchdir(2)
fchmod(2)
fchmodat(2) 2.6.16
fchown(2)
fchown32(2) 2.4
fchownat(2) 2.6.16
fcntl(2)
fcntl64(2) 2.4
fdatasync(2)
fgetxattr(2) 2.6 ; 2.4.18
flistxattr(2) 2.6 ; 2.4.18
flock(2) 2.0
fork(2)
free_hugepages(2) 2.5.36 Supprimé dans 2.5.44
fremovexattr(2) 2.6 ; 2.4.18
fsetxattr(2) 2.6 ; 2.4.18
fstat(2)
fstat64(2) 2.4
fstatat64(2) 2.6.16
fstatfs(2)
fstatfs64(2) 2.6
fsync(2)
ftime(2) Pas implémenté
ftruncate(2)
ftruncate64(2) 2.4
futex(2) 2.6
futimesat(2) 2.6.16
get_kernel_syms(2)
get_mempolicy(2) 2.6.6
get_robust_list(2) 2.6.17
get_thread_area(2) 2.6
getcpu(2) 2.6.19
getcwd(2) 2.2
getdents(2) 2.0
getdents64(2) 2.4
getegid(2)
getegid32(2) 2.4
geteuid(2)
geteuid32(2) 2.4
getgid(2)
getgid32(2) 2.4
getgroups(2)
getgroups32(2) 2.4
getitimer(2)
getpeername(2)
getpagesize(2) 2.0 Pas sur i386
getpgid(2)
getpgrp(2)
getpid(2)
getpmsg(2) Pas implémenté
getppid(2)
getpriority(2)
getresgid(2) 2.2
getresgid32(2) 2.4
getresuid(2) 2.2
getresuid32(2) 2.4
getrlimit(2)
getrusage(2)
getsid(2) 2.0
getsockname(2)
getsockopt(2)
gettid(2) 2.4.11
gettimeofday(2)
getuid(2)
getuid32(2) 2.4
getxattr(2) 2.6 ; 2.4.18
gtty(2) Pas implémenté
idle(2) Pas implémenté
init_module(2)
inotify_add_watch(2) 2.6.13
inotify_init(2) 2.6.13
inotify_init1(2) 2.6.27
inotify_rm_watch(2) 2.6.13
io_cancel(2) 2.6
io_destroy(2) 2.6
io_getevents(2) 2.6
io_setup(2) 2.6
io_submit(2) 2.6
ioctl(2)
ioperm(2)
iopl(2)
ioprio_get(2) 2.6.13
ioprio_set(2) 2.6.13
ipc(2)
kexec_load(2) 2.6.7
keyctl(2) 2.6.11
kill(2)
lchown(2) 2.2
lchown32(2) 2.4
lgetxattr(2) 2.6 ; 2.4.18
link(2)
linkat(2) 2.6.16
listen(2)
listxattr(2) 2.6 ; 2.4.18
llistxattr(2) 2.6; 2.4.18
lock(2) Pas implémenté
lookup_dcookie(2) 2.6
lremovexattr(2) 2.6 ; 2.4.18
lseek(2)
lsetxattr(2) 2.6 ; 2.4.18
lstat(2)
lstat64(2) 2.4
madvise(2) 2.4
madvise1(2) 2.4
mbind(2) 2.6.6
migrate_pages(2) 2.6.16
mincore(2) 2.4
mkdir(2)
mkdirat(2) 2.6.16
mknod(2)
mknodat(2) 2.6.16
mlock(2)
mlockall(2)
mmap(2)
mmap2(2) 2.4
modify_ldt(2)
mount(2)
move_pages(2) 2.6.18
mprotect(2)
mpx(2) Pas implémenté
mq_getsetattr(2) 2.6.6
mq_notify(2) 2.6.6
mq_open(2) 2.6.6
mq_timedreceive(2) 2.6.6
mq_timedsend(2) 2.6.6
mq_unlink(2)
mremap(2) 2.0
msgctl(2)
msgget(2)
msgrcv(2)
msgsnd(2)
msync(2) 2.0
munlock(2)
munlockall(2)
munmap(2)
nanosleep(2) 2.0
nfsservctl(2) 2.2
nice(2)
oldfstat(2)
oldlstat(2)
oldolduname(2)
oldstat(2)
olduname(2)
open(2)
openat(2) 2.6.16
pause(2)
pciconfig_iobase(2) 2.2.15; 2.4 Pas sur i386
pciconfig_read(2) 2.0.26; 2.2 Pas sur i386
pciconfig_write(2) 2.0.26; 2.2 Pas sur i386
personality(2) 1.2
phys(2) Pas implémenté
pipe(2)
pipe2(2) 2.6.27
pivot_root(2) 2.4
poll(2) 2.2
ppoll(2) 2.6.16
prctl(2) 2.2
pread64(2) Ajoué en tant que « pread »
dans 2.2 ; renommé
« pread64 » dans 2.6
preadv(2) 2.6.30
prof(2) Pas implémenté
profil(2) Pas implémenté
pselect6(2) 2.6.16
ptrace(2)
putpmsg(2) Pas implémenté
pwrite64(2) Ajoué en tant que « pwrite »
dans 2.2 ; renommé
« pwrite64 » dans 2.6
pwritev(2) 2.6.30
query_module(2) 2.2
quotactl(2)
read(2)
readahead(2) 2.4.13
readdir(2)
readlink(2)
readlinkat(2) 2.6.16
readv(2) 2.0
reboot(2)
recv(2)
recvfrom(2)
recvmsg(2)
remap_file_pages(2) 2.6
removexattr(2) 2.6; 2.4.18
rename(2)
renameat(2) 2.6.16
request_key(2) 2.6.11
restart_syscall(2) 2.6
rmdir(2)
rt_sigaction(2) 2.2
rt_sigpending(2) 2.2
rt_sigprocmask(2) 2.2
rt_sigqueueinfo(2) 2.2
rt_sigreturn(2) 2.2
rt_sigsuspend(2) 2.2
rt_sigtimedwait(2) 2.2
sched_get_priority_max(2) 2.0
sched_get_priority_min(2) 2.0
sched_getaffinity(2) 2.6
sched_getparam(2) 2.0
sched_getscheduler(2) 2.0
sched_rr_get_interval(2) 2.0
sched_setaffinity(2) 2.6
sched_setparam(2) 2.0
sched_setscheduler(2) 2.0
sched_yield(2) 2.0
security(2) Pas implémenté
select(2)
semctl(2)
semget(2)
semop(2)
semtimedop(2) 2.6 ; 2.4.22
send(2)
sendfile(2) 2.2
sendfile64(2) 2.6 ; 2.4.19
sendmsg(2)
sendto(2)
set_mempolicy(2) 2.6.6
set_robust_list(2) 2.6.17
set_thread_area(2) 2.6
set_tid_address(2) 2.6
set_zone_reclaim(2) 2.6.13 Retiré dans 2.6.16
(n'a jamais été disponible
pour l'espace utilisateur)
setdomainname(2)
setfsgid(2) 1.2
setfsgid32(2) 2.4
setfsuid(2) 1.2
setfsuid32(2) 2.4
setgid(2)
setgid32(2) 2.4
setgroups(2)
setgroups32(2) 2.4
sethostname(2)
setitimer(2)
setpgid(2)
setpriority(2)
setregid(2)
setregid32(2) 2.4
setresgid(2) 2.2
setresgid32(2) 2.4
setresuid(2) 2.2
setresuid32(2) 2.4
setreuid(2)
setreuid32(2) 2.4
setrlimit(2)
setsid(2)
setsockopt(2)
settimeofday(2)
setuid(2)
setuid32(2) 2.4
setup(2) Retiré dans 2.2
setxattr(2) 2.6 ; 2.4.18
sgetmask(2)
shmat(2)
shmctl(2)
shmdt(2)
shmget(2)
shutdown(2)
sigaction(2)
sigaltstack(2) 2.2
signal(2)
signalfd(2) 2.6.22
signalfd4(2) 2.6.27
sigpending(2)
sigprocmask(2)
sigreturn(2)
sigsuspend(2)
socket(2)
socketcall(2)
socketpair(2)
splice(2) 2.6.17
spu_create(2) 2.6.16 PowerPC uniquement
spu_run(2) 2.6.16 PowerPC uniquement
ssetmask(2)
stat(2)
stat64(2) 2.4
statfs(2)
statfs64(2) 2.6
stime(2)
stty(2) Pas implémenté
swapoff(2)
swapon(2)
symlink(2)
symlinkat(2) 2.6.16
sync(2)
sync_file_range(2) 2.6.17
sysfs(2) 1.2
sysinfo(2)
syslog(2)
tee(2) 2.6.17
tgkill(2) 2.6
time(2)
timer_create(2) 2.6
timer_delete(2) 2.6
timer_getoverrun(2) 2.6
timer_gettime(2) 2.6
timer_settime(2) 2.6
timerfd_create(2) 2.6.25
timerfd_gettime(2) 2.6.25
timerfd_settime(2) 2.6.25
times(2)
tkill(2) 2.6 ; 2.4.22
truncate(2)
truncate64(2) 2.4
tuxcall(2) Pas implémenté
ugetrlimit(2) 2.4
ulimit(2) Pas implémenté
umask(2)
umount(2)
umount2(2) 2.2
uname(2)
unlink(2)
unlinkat(2) 2.6.16
unshare(2) 2.6.16
uselib(2)
ustat(2)
utime(2)
utimensat(2) 2.6.22
utimes(2) 2.6
vfork(2)
vhangup(2)
vm86old(2)
vmsplice(2) 2.6.17
vserver(2) Pas implémenté
wait4(2)
waitid(2) 2.6.10
waitpid(2)
write(2)
writev(2) 2.0

Sur de nombreuses plates-formes, y compris les i386, les appels des sockets sont multiplexés (par des fonctions de la glibc) à travers socketcall(2) et de même les IPC System V via ipc(2).

NOTES

Veuillez noter les points suivants :

En général, le code implémentant l'appel système ayant le numéro __NR_xxx dans le fichier /usr/include/asm/unistd.h se trouve dans la routine sys_xxx() du noyau. (La table de distribution pour la version i386 se trouve dans /usr/src/linux/arch/i386/kernel/entry.S.) Il y a néanmoins plusieurs exceptions, principalement lorsque d'anciens appels système ont été remplacés par des nouveaux. Ces cas n'ont pas été traités de manière homogène. Sur les plate-formes avec une émulation de système propriétaire, comme parisc, sparc, sparc64 et alpha, il existe de nombreux appels supplémentaires ; mips64 contient aussi un jeu complet d'appels système 32-bits.

Avec le temps, des changements dans les interfaces de certains appels système ont été nécessaires. Une raison pour ces changements a été l'augmentation de la taille des structures ou des valeurs scalaires passées aux appels système. À cause de ces changements, il y a maintenant plusieurs implémentations de certains appels système (par exemple truncate(2) et truncate64(2)). Ces différentes versions ne sont pas compatibles au niveau binaire, mais les applications ne sont généralement pas impactées par ceci : la magie de la glibc fait en sorte que les binaires existants utilisent la version des appels système qui existaient au moment où le binaire a été créé. Ainsi la compatibilité de l'ABI est préservée. Voici des exemples d'appels système qui existent dans plusieurs versions :

  • À ce jour, il y a trois versions de stat(2) : sys_stat() (entrée __NR_oldstat), sys_newstat() (entrée __NR_stat) et sys_stat64() (entrée __NR_stat64), la dernière étant celle celle utilisée actuellement. La même histoire s'applique à lstat(2) et fstat(2).
  • De même, les définitions __NR_oldolduname, __NR_olduname et __NR_uname concernent les routines sys_olduname(), sys_uname() et sys_newuname().
  • Dans Linux 2.0, une nouvelle version de vm86(2) est apparue, l'ancienne et la nouvelle routine du noyau étant appelées sys_vm86old() et sys_vm86().
  • Dans Linux 2.4, une nouvelle version de getrlimit(2) est apparue, l'ancienne et la nouvelle routine du noyau étant appelées sys_old_getrlimit() (entrée __NR_getrlimit) et sys_getrlimit() (entrée __NR_ugetrlimit).
  • Linux 2.4 a augmenté la taille des identifiants d'utilisateur et de groupe de 16 bits à 32 bits. Pour permettre ce changement, un jeu d'appels système ont été ajoutés (par exemple, chown32(2), getuid32(2), getgroups32(2), setresuid32(2)), surchargeant les précédents appels système du même nom sans le suffixe « 32 ».
  • Linux 2.4 a ajouté la gestion des gros fichiers pour les applications sur architecture 32 bits (c'est-à-dire la gestion des fichiers dont la taille et les décalages dans le fichier ne peuvent pas être représentés sur des 32 bits). Pour gérer ce changement, des appels système, qui utilisent des déplacements dans des fichiers ou des tailles de fichiers, ont dû être remplacés. Ainsi, les appels système suivants ont été ajoutés : fcntl64(2), ftruncate64(2), getdents64(2), stat64(2), statfs64(2) et les appels système analogues qui fonctionnent avec des descripteurs de fichier ou des liens symboliques. Ces appels système remplacent les anciens appels système qui, sauf pour les appels « stats », ont le même nom sans le suffixe « 64 ».

    Sur les plates-formes récentes qui n'ont que des accès aux fichiers 64-bits et des UID 32-bits (ex. alpha, ia64, s390x) il n'y a pas d'appel *64 ou *32. Quand les appels *64 et *32 existent, les autres versions sont obsolètes.

  • Les appels rt_sig* ont été ajoutés dans le noyau 2.2 pour gérer l'ajout des signaux temps-réel (voir signal(7)). Ces appels système remplacent les appels précédents du même nom sans le préfixe « rt_ ».
  • Les appels système select(2) et mmap(2) utilisent 5 paramètres ou plus, ce qui a posé des problèmes avec les méthodes classiques de passage de paramètres sur i386. Ainsi, alors que les autres architectures disposent de sys_select() et sys_mmap() correspondant à __NR_select et __NR_mmap, on trouve sur les i386 old_select() et old_mmap() à leur place. Ce sont des routines utilisant un pointeur sur un bloc de paramètres. De nos jours, passer 5 paramètres n'est plus un problème, et il existe donc un __NR__newselect correspondant directement à sys_select() ; il en est de même pour __NR_mmap2.

VOIR AUSSI

syscall(2), unimplemented(2), libc(7)

COLOPHON

Cette page fait partie de la publication 3.23 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <URL:http://alioth.debian.org/projects/perkamon/>.

Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-l10n-fr@lists.alioth.debian.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».

6 mai 2009 Linux